# 递归函数

"""
    递归函数：定义了一个函数，在函数内自己调用自己这个函数

    斐波那契数列
    实现一个数的阶乘

    递归函数必须要有结束条件，否则会一直调用直到栈溢出

    递归函数效率不高，能不用尽量不用
"""

def digui(num):
    print(num) # 3，2，1，0
    # 检测是否到达临界条件
    if num > 0:
        digui(num-1)
    print(num) # 0，1，2，3

digui(3)
'''
解析当前调用递归函数的执行过程
digui(3) ==> 3
    digui(3-1) ==> 2
        digui(2-1) ==> 1
            digui(1-1) ==> 0
            digui(0) ==> 0
        digui(1) ==> 1
    digui(2) ==> 2
digui(3) ==> 3
'''




resList = [0]
def fbnqsl(n, thisN=1, lastNum=0, nextNum=1):
    """
    递归实现斐波那契数列
    :param n: 斐波那契数列一个几项
    :param thisN: 当前第几个
    :param lastNum: 当前数列最后一个数
    :param nextNum: 下一个应该添加到数列的值
    :return: 数列
    """
    if n <= 0:
        print('错误！')
        return None
    elif n == 1:
        pass
    else:
        if n == thisN:
            pass
        else:
            resList.append(nextNum)
            lastNum1 = nextNum
            nextNum1 = lastNum + nextNum
            thisN1 = thisN + 1
            fbnqsl(n, thisN=thisN1, lastNum=lastNum1, nextNum=nextNum1)
    return resList

# print(fbnqsl(6))



